package cn.wit.luohui.day09;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

public class DemoBitOperator {
//判断数组里面是否用重复吧元素
	@Test
	public void test() {
		 int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
//			int[] numbers = {1, 2, 3, 4, 2, 6, 7, 9};
//			int[] numbers = {};
		 System.out.println(hasDuplicatedNumber2(numbers));
	}
// 通过set集合的特性：元素不重复来去重
	public static boolean hasDuplicatedNumber(int[] numbers) {
		Set<Integer> set = new HashSet<>();
		for (int i : numbers) {
			set.add(i);
			}
		return set.size() == numbers.length;
	}
	// 通过位运算来判断重复
	public static boolean hasDuplicatedNumber2(int[] numbers) {
		// 0_0000_0000
		// 0_0000_0001 表示数组里面有1这个数字
		// 0_0000_0010 -> 2
		// 0_0000_0111

		// mark | 1 -> 0_0000_0001
		// mark | 1 << 1 -> 0_0000_0011
		// mark | 1 << 1 -> 0_0000_0011
		
		int mark=0;
		for(int i:numbers) {
			int result=1<<(i-1);
			mark=mark|result;
		}
		System.out.println(Integer.toBinaryString(mark));
		return mark == ((1 << 9) - 1);
		
	}
	// 位运算演示
		// 或：0 | 0 = 0   0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
		// 与: 0 & 0 = 0   0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1
	@Test
	public void testBitOperator() {
		// | & ^		位运算符 | 或  & 与
		// || && 
		int i = 1;		// 0b1;二进制
		int j = 2;		// 0b10;
		
		System.out.println(i | j);
		System.out.println(i & j);
	}
}
